The present invention relates to Java Archive Files, and more specifically, to the Java Programming language.
The Java Programming language provides a convenient means for packaging and distributing applications using Java Archive Files (JAR). These files can be used to deliver and directly run Java applications and applets.
With the ever growing complexity of enterprise Java applications, often an entire application is split into several pieces that may run in parallel and potentially also on different nodes (a User Interface module, a back-end module, a Command Line Interface module, and so on). In such circumstances it may happen that a common set of JAR files are required to run all such modules, but for constraints given by the runtime, it may not be possible to directly reference just one copy of the JAR files.
This means that multiple copies of the same JAR file may be necessary even on the same physical node and this poses some issues when an application has to be updated.
If the update process is not correctly performed it may happen that not all the copies of a given JAR file get updated resulting in unpredictable behaviors of the application. Since the application delivery/packaging and the patch delivery/packaging operations are in general done by different teams and considering the complexity of an enterprise application (especially those that run in a J2EE and/or OSGi container), it is not so infrequent that such issues happen.
In the pertinent field, there are several tools and systems for upgrading an application, but none of them has specific mechanisms for coping with the issue described so far. They in general assume that who prepares the packaging knows exactly what has to be included in the patch and where it has to be replaced.